/*****************************************************************************************
 **  Author:COCO 2022
 *****************************************************************************************/
//此js文件是用来自定义扩展业务代码，可以扩展一些自定义页面或者重新配置生成的代码
import { ElMessageBox } from 'element-plus'
import { h, resolveComponent } from 'vue'
import modelHeader from './production_extend/ProductModelBody.vue'
import gridFooter from './production_extend/SalesOrderGridFooter.vue'
import gridHeader from './production_extend/Production_SaleOrderGridHeader.vue'
import gridBody from './production_extend/Production_SalesOrderGridBody.vue'
// import FileSaver from 'file-saver'

let extension = {
  components: {
    //查询界面扩展组件
    gridHeader,
    gridBody,
    gridFooter,
    //新建、编辑弹出框扩展组件
    modelHeader,
    modelBody: {
      emits: ['parentCall'],
      render() {
        return [
          h(
            resolveComponent('el-alert'),
            {
              style: { 'margin-bottom': '5px' },
              'show-icon': true,
              type: 'warning',
              closable: false,
              title: '点击【数量】可以对订单数量直接进行修改',
            },
            ''
          ),
        ]
      },
    },
    modelFooter: '',
  },
  tableAction: '', //指定某张表的权限(这里填写表名,默认不用填写)
  buttons: { view: [], box: [], detail: [] }, //扩展的按钮
  mounted() {},
  methods: {
    onActivated() {
      let salesOrderCode = this.$route.query.SalesOrderCode

      if (salesOrderCode) {
        var param = {
          order: 'desc',
          page: 1,
          rows: 30,
          sort: 'CreateDate',
          wheres:
            '[{"name":"SalesOrderCode","value":"' +
            salesOrderCode +
            '","displayType":"like"}]',
        }
        this.http
          .post('/api/Production_SalesOrder/getPageData', param, true)
          .then((result) => {
            this.$refs.table.rowData = result.rows
          })
      }
    },
    //下面这些方法可以保留也可以删除
    async onInit() {
      //框架初始化配置前，
      //示例：在按钮的最前面添加一个按钮
      //   this.buttons.unshift({  //也可以用push或者splice方法来修改buttons数组
      //     name: '按钮', //按钮名称
      //     icon: 'el-icon-document', //按钮图标vue2版本见iview文档icon，vue3版本见element ui文档icon(注意不是element puls文档)
      //     type: 'primary', //按钮样式vue2版本见iview文档button，vue3版本见element ui文档button
      //     onClick: function () {
      //       this.$Message.success('点击了按钮');
      //     }
      //   });

      //示例：设置修改新建、编辑弹出框字段标签的长度
      // this.boxOptions.labelWidth = 150;
      //显示序号(默认隐藏)
      // this.single = true
      this.columnIndex = true
      //点击单元格编辑与结束编辑(默认是点击单元格编辑，鼠标离开结束编辑)
      this.detailOptions.clickEdit = true
      this.tableMaxHeight = (document.body.clientHeight - 260) / 2
      const { permission } = this.$store.getters.getPermission(
        '/Production_SalesOrder'
      )
      // this.buttons.splice(3, 0, {
      //   //也可以用push或者splice方法来修改buttons数组
      //   name: '打印', //按钮名称
      //   icon: 'el-icon-printer', //按钮图标vue2版本见iview文档icon，vue3版本见element ui文档icon(注意不是element puls文档)
      //   type: 'warning', //按钮样式vue2版本见iview文档button，vue3版本见element ui文档button
      //   onClick: function () {
      //     let selectRow = this.$refs.table.getSelected()
      //     if (selectRow.length == 0) {
      //       return this.$error('请选择要编辑的行!')
      //     }
      //     if (selectRow.length != 1) {
      //       return this.$error('只能选择一行数据进行编辑!')
      //     }
      //     let html = document.getElementById('collect')
      //     window.open(
      //       this.http.ipAddress +
      //         'Print-Designer/print.html?cat=Production_SalesOrder&id=' +
      //         selectRow[0].SalesOrder_Id +
      //         '&token=' +
      //         this.$store.getters.getToken(),
      //       '_blank'
      //     )
      //   },
      // })
      // this.buttons.splice(4, 0, {
      //   //也可以用push或者splice方法来修改buttons数组
      //   name: '模版Excel导出', //按钮名称
      //   icon: 'el-icon-s-unfold', //按钮图标vue2版本见iview文档icon，vue3版本见element ui文档icon(注意不是element puls文档)
      //   type: 'warning', //按钮样式vue2版本见iview文档button，vue3版本见element ui文档button
      //   onClick: function () {
      //     let selectRow = this.$refs.table.getSelected()
      //     if (selectRow.length == 0) {
      //       return this.$error('请选择要编辑的行!')
      //     }
      //     if (selectRow.length != 1) {
      //       return this.$error('只能选择一行数据进行导出!')
      //     }
      //     let urlSales =
      //       'api/Production_SalesOrder/exportExcelTemplate?cat=Production_SalesOrder&SalesOrder_Id=' +
      //       selectRow[0].SalesOrder_Id
      //     this.http.get(urlSales, {}, true).then((content) => {
      //       if (content == '') {
      //         this.$error('请先维护模版信息!')
      //       } else {
      //         var URL = this.http.webAddress + '/Excel/' + content // URL 为URL地址
      //         FileSaver.saveAs(URL, content)
      //       }
      //     })
      //   },
      // })

      //重写订单编辑删除逻辑
      this.detailOptions.buttons.forEach((item) => {
        if (item.name == '删除行') {
          item.onClick = () => {
            let selectedRows = this.$refs.detail.getSelected()
            console.log(selectedRows)
            let flag = false
            selectedRows.some((item, index) => {
              if (item.SalesOrderStatus && item.SalesOrderStatus > 1) {
                this.$message.error(
                  `第${index + 1}条数据的状态已经变更，无法删除`
                )
                flag = true
                return true
              }
            })

            if (!flag) {
              this.$refs.detail.delRow()
            }
          }
        }
      })

      //查询界面删除
      this.buttons.forEach((item) => {
        if (item.value == 'Delete') {
          item.onClick = () => {
            if (this.$refs.table.getSelected().length) {
              if (this.$refs.gridFooter.rows[0].SalesOrderStatus > 1) {
                this.$message.error(
                  '当前勾选订单下产品的状态已经变更，无法删除'
                )
              } else {
                this.del()
              }
            } else {
              this.$message.error('请勾选项目后再点击删除')
            }
          }
        }
      })

      this.boxButtons.forEach((item) => {
        if (item.value == 'save') {
          item.onClick = async () => {
            const ProductInfo = this.$refs.detail.rowData
            const params = {
              mainData: {
                ...this.editFormFields,
                ...ProductInfo[0],
              },
              detailData: [],
              delKeys: null,
            }
            let res = null
            if (this.currentAction == 'update') {
              let values = {}
              Object.keys(params.mainData).forEach((key) => {
                console.log(key, params.mainData[key])
                if (params.mainData[key] === null) {
                  values[key] = ''
                } else {
                  values[key] = params.mainData[key]
                }
              })
              delete values.Modifier
              delete values.ModifyDate
              delete values.ModifyID
              delete values.SalesOrderList_Id
              delete values.CreateDate
              delete values.CreateID
              delete values.Creator
              delete values.ActualEndDate
              delete values.ActualStartDate
              delete values.DeliveryDate
              delete values.PlanEndDate
              delete values.PlanStartDate

              res = await this.http.post(
                '/api/Production_SalesOrder/Update',
                {
                  mainData: values,
                  detailData: null,
                  delKeys: null,
                },
                true
              )
            } else {
              res = await this.http.post(
                '/api/Production_SalesOrder/Add',
                params,
                true
              )
            }

            if (res.status) {
              this.$message.success('保存成功')
              this.boxModel = false
              this.search()
            } else {
              this.$message.error(res.message)
            }
          }
        }
      })

      this.columns.unshift({
        title: '操作',
        field: 'action',
        width: 350,
        render: (h, { row }) => {
          let dom1 = ''
          let dom2 = ''
          let dom3 = ''
          console.log(permission)
          if (permission.includes('BusinessScheduling')) {
            dom1 = (
              <el-link
                underline={false}
                type="primary"
                onClick={() => this.BusinessScheduling(row)}
              >
                <i class="el-icon-news"></i>
                业务排单
              </el-link>
            )
          }

          if (permission.includes('createReworkOrder')) {
            dom2 = (
              <el-link
                underline={false}
                type="primary"
                onClick={(row) => {
                  this.$refs.gridBody.open(row)
                }}
                style="margin-left: 10px"
              >
                <i class="el-icon-sold-out"></i>
                生成返工工单(客退)
              </el-link>
            )
          }

          // if (permission.includes('closeMom')) {
          //   if (row.SalesOrderStatus !== 3) {
          //     dom3 = (
          //       <el-link
          //         underline={false}
          //         type="primary"
          //         style="margin-left: 10px"
          //         onClick={async () => {
          //           try {
          //             await ElMessageBox.confirm(
          //               '确定要强制结案吗?',
          //               'Warning',
          //               {
          //                 confirmButtonText: '确定',
          //                 cancelButtonText: '取消',
          //                 type: 'warning',
          //               }
          //             )

          //             const res = await this.http.post(
          //               `/api/Production_WorkOrder/ClosedMom?Id=${row.SalesOrder_Id}`,
          //               null,
          //               true
          //             )
          //             if (res.status) {
          //               this.$message.success('结案成功')
          //               this.$emit('parentCall', ($parent) => {
          //                 $parent.search()
          //               })
          //             } else {
          //               this.$message.error(res.message)
          //             }
          //           } catch (error) {
          //             console.log(error)
          //           }
          //         }}
          //       >
          //         <i class="el-icon-circle-close"></i>
          //         强制结案
          //       </el-link>
          //     )
          //   }
          // }
          return h('div', [dom1, dom2, dom3])
        },
      })
    },
    async onInited() {
      //框架初始化配置后
      //如果要配置明细表,在此方法操作
      //this.detailOptions.columns.forEach(column=>{ });
      this.detailOptions.buttons.forEach((button) => {
        if (button.name == '添加行') {
          button.hidden = true
        }
      })
      this.detailOptions.buttons.unshift({
        name: '选择产品', //按钮名称
        icon: 'el-icon-plus', //按钮图标，参照iview图标
        hidden: false, //是否隐藏按钮(如果想要隐藏按钮，在onInited方法中遍历buttons，设置hidden=true)
        onClick: function () {
          //触发事件
          this.$refs.modelHeader.open()
        },
      })

      this.detailOptions.columns.forEach((item) => {
        // console.log(item)
        if (
          item.field == 'FinishQty' ||
          item.field == 'CreateDate' ||
          item.field == 'CreateID' ||
          item.field == 'Creator' ||
          item.field == 'Modifier' ||
          item.field == 'ModifyDate' ||
          item.field == 'ModifyID' ||
          item.field == 'EstimateQty' ||
          item.field == 'SalesOrderStatus' ||
          item.field == 'MoCode' ||
          item.field == 'ActualStartDate' ||
          item.field == 'ActualEndDate'
        ) {
          item.hidden = true
        }

        if (item.field == 'PlanStartDate') {
          item.edit.type = 'datetime'
        }

        if (item.field == 'PlanEndDate') {
          item.edit.type = 'datetime'
          item.required = true
        }

        // if (item.field == 'CusName') {
        //   item.edit = {
        //     type: 'select',
        //   }
        //   item.bind = {
        //     key: 'customer',
        //     data: []
        //   }
        // }
      })
    },
    searchBefore(param) {
      //界面查询前,可以给param.wheres添加查询参数
      //返回false，则不会执行查询
      return true
    },
    searchAfter(result) {
      //查询后，result返回的查询数据,可以在显示到表格前处理表格的值
      this.$nextTick(() => {
        if (result.length) this.$refs.gridFooter.rowClick(result[0], '销售订单')
      })
      return true
    },
    addBefore(formData) {
      //新建保存前formData为对象，包括明细表，可以给给表单设置值，自己输出看formData的值
      let flag = true
      console.log(formData)
      if (formData.detailData.length && formData.detailData.length == 1) {
        if (
          formData.detailData[0].PlanEndDate == '' ||
          !formData.detailData[0].PlanEndDate
        ) {
          flag = false
          this.$message.error('请输入计划结束日期')
          return false
        }

        if (
          formData.detailData[0].CusName == '' ||
          !formData.detailData[0].CusName
        ) {
          flag = false
          this.$message.error('请选择客户')
          return false
        }

        if (formData.mainData.Price === '') {
          flag = false
          this.$message.error('请输入单价')
          return false
        }
        if (flag) return true
      }
      this.$message.error('一个订单对应一个产品，请确认')
      return false
    },
    updateBefore(formData) {
      // console.log(formData)
      //编辑保存前formData为对象，包括明细表、删除行的Id
      // if (formData.detailData[0].SalesOrderStatus > 1) {
      //   this.$message.error('该订单下的产品状态已变更，无法修改')
      //   return false
      // }

      // if (formData.detailData.length && formData.detailData.length == 1) {
      //   return true
      // } else {
      //   this.$message.error('一个订单对应一个产品，请确认')
      //   return false
      // }

      return true
    },
    rowClick({ row, column, event }) {
      //查询界面点击行事件
      //查询界面点击行事件
      this.$refs.table.$refs.table.toggleRowSelection(row) //单击行时选中当前行;
      //调用Doc_Order1GridFooter.vue文件中(订单明细)的查询
      this.$refs.gridFooter.rowClick(row, '销售订单')
    },
    modelOpenAfter(row) {
      //点击编辑、新建按钮弹出框后，可以在此处写逻辑，如，从后台获取数据
      //(1)判断是编辑还是新建操作： this.currentAction=='Add';
      //(2)给弹出框设置默认值
      //(3)this.editFormFields.字段='xxx';
      //如果需要给下拉框设置默认值，请遍历this.editFormOptions找到字段配置对应data属性的key值
      //看不懂就把输出看：console.log(this.editFormOptions)

      this.editFormOptions.forEach((item) => {
        item.forEach((x) => {
          //如果是编辑设置为只读
          if (x.field == 'SalesOrderCode') {
            //disabled是editFormOptions的动态属性，这里只能通过this.$set修改值
            //vue3版本改为设置：x.disabled=isEDIT
            x.placeholder = '请输入，忽略将自动生成'
          }
        })
      })

      if (this.currentAction == 'update') {
        let timer = setInterval(() => {
          if (this.$refs.detail.rowData.length != 0) {
            clearInterval(timer)
            if (this.$refs.detail.rowData[0].SalesOrderStatus > 1) {
              this.detailOptions.buttons[0].hidden = true
            }
          }
        }, 50)

        console.log(row)
        console.log(this.detailOptions)
        this.editFormOptions.forEach((item) => {
          item.forEach((x) => {
            if (x.field == 'SalesOrderCode' || x.field == 'Price') {
              x.disabled = true
            }
          })
        })

        this.detailOptions.buttons.forEach((item) => {
          if (item.name == '删除行' || item.name == '选择产品') {
            item.hidden = true
          }
        })
        //锁数量，无法编辑
        this.detailOptions.edit = false
      } else {
        this.detailOptions.buttons[0].hidden = false
        this.detailOptions.edit = true
        this.editFormOptions.forEach((item) => {
          item.forEach((x) => {
            if (x.field == 'SalesOrderCode' || x.field == 'Price') {
              x.disabled = false
            }
          })
        })
        this.detailOptions.buttons.forEach((item) => {
          if (item.name == '删除行' || item.name == '选择产品') {
            item.hidden = false
          }
        })
      }
    },
    //业务排单
    BusinessScheduling(row) {
      this.$refs.gridHeader.open(row)
      // console.log(11)
    },
  },
}
export default extension
